/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.nanterre.annuaire.forStruts;

import com.nanterre.annuaire.bd.BDInteraction;
import com.nanterre.annuaire.model.*;
import java.io.PrintWriter;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

/**
 *
 * @author albran
 */
public class AffichierRecherche extends org.apache.struts.action.Action {

    /*
     * forward name="success" path=""
     */
    private static final String SUCCESS = "success";

    /**
     * This is the action called from the Struts framework.
     *
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        response.setContentType("text/html;charset=UTF-8");
        String recherche = request.getParameter("recherche");
        String type = request.getParameter("type");
        if(recherche != null && recherche.length()>0){
            PrintWriter out = response.getWriter();
            BDInteraction bdi = new BDInteraction();
            int parentID = bdi.getIdFromLibelle(type, recherche);
            if("DOMAINE".equals(type)){
                List<Mention> listMention = bdi.getAllMentionsByIdDomaine(parentID);
                for(Mention current : listMention){
                       out.println(current.afficherMention(parentID));
                }
            } else if("MENTION".equals(type)){
                List<Diplome> listDiplomes = bdi.getAllDiplomesByIdMention(parentID);
                Mention mention = bdi.getMentionsByIdMention(parentID);
                for(Diplome current : listDiplomes){
                    out.println(mention.afficherMentionNotComplete(parentID));
                    out.println("<ul class=\"listArbre\">");
                    out.println(current.afficherDiplome(parentID));
                    out.println("</ul>");
                    out.println("</li>");
                }
            } else if("DIPLOME".equals(type)){
                int diplomeID = bdi.getIdFromLibelle("DIPLOME", recherche);
                Diplome diplome = bdi.getDiplomeById(diplomeID);
                List<Parcours> listParcours = bdi.getAllParcoursByParentId(parentID);
                out.println(diplome.afficherDiplomeNotComplete(parentID));
                out.println("<ul class=\"listArbre\">");
                for(Parcours current : listParcours){
                    out.println(current.afficherParcours(parentID));
                }
                out.println("</ul>");
                out.println("</li>");
            } else if("PARCOURS".equals(type)){
                int parcoursID = bdi.getIdFromLibelle("PARCOURS", recherche);
                Parcours parcours = bdi.getParcoursById(parcoursID);
                Diplome diplome = bdi.getDiplomeByParcoursID(parcoursID);
                List<UE> listUE = bdi.getAllUeByParentId(parentID);
                out.println(diplome.afficherDiplomeNotComplete(-1));
                out.println("<ul class=\"listArbre\">");
                out.println(parcours.afficherParcoursNotComplete(diplome.getId()));
                out.println("<ul class=\"listArbre\">");
                out.println("<table border=\"1\">");
                //pour chaque semestre
                for(int i=1; i<=10; i++){ 
                    boolean notExiste = true;
                    for(UE current : listUE){
                        if(current.getSemestre() == i){
                            if(notExiste){
                                out.println("<tr class=\"semestreTR\"><td class=\"semestre\">S"+i+"</td><td>");
                                notExiste = false;
                            }
                            Float nbCredit = bdi.getCreditsUE(current.getId());
                            out.println(current.afficherUE(parentID, nbCredit));
                        }
                    }
                    out.println("</td>");
                    out.println("</tr>");
                }
                out.println("</table>");
                out.println("</ul>");
                out.println("</li>");
                out.println("</ul>");
                out.println("</li>");
            } else if("UE".equals(type)){
                request.getSession().setAttribute("recherche", recherche);
                List<Diplome> listDiplomes = bdi.getDiplomeByLibelleUE(recherche);
                for(Diplome d : listDiplomes){
                    List<Parcours> listParcoursWithUE = new ArrayList<Parcours>();
                    List<Parcours> listParcours = bdi.getAllParcoursByParentId(d.getId());
                    for(Parcours p : listParcours){
                        if(bdi.getUeByParentIdAndLibelleUE(p.getId(), recherche) != null){
                            listParcoursWithUE.add(p);
                        }
                    }
                   out.println(d.afficherDiplomeNotComplete(parentID));
                    out.println("<ul class=\"listArbre\">");
                    for(Parcours p : listParcoursWithUE){
                        out.println(p.afficherParcours(d.getId()));
                    }
                    out.println("</ul>");
                }
            } else if("EC".equals(type)){
                request.getSession().setAttribute("recherche", recherche);
                List<Diplome> listDiplomes = bdi.getDiplomeByLibelleEC(recherche);
                for(Diplome d : listDiplomes){
                    List<Parcours> listParcoursWithEC = new ArrayList<Parcours>();
                    List<Parcours> listParcours = bdi.getAllParcoursByParentId(d.getId());
                    for(Parcours p : listParcours){
                        if(bdi.getEcByParcourstIdAndLibelleEc(p.getId(), recherche) != null){
                            listParcoursWithEC.add(p);
                        }
                    }
                    out.println(d.afficherDiplomeNotComplete(parentID));
                    out.println("<ul class=\"listArbre\">");
                    for(Parcours p : listParcoursWithEC){
                        out.println(p.afficherParcours(d.getId()));
                    }
                    out.println("</ul>");
                    out.println("</li>");
                }
            }
            return null;
        }
        return mapping.findForward(SUCCESS);
    }
}
